// TODO 导入 express 路由 sql

const db = require('../db/sql');

const bcrypt = require('bcryptjs');

// TODO 暴露数据
exports.getUserInfo = (req, res) => {
  // * 查询对应 id
  // const sql = `select id, username from cs_base where id=?`;
  const sql = `select * from cs_base where id=?`


  db.query(sql, req.user.id, (err, results) => {
    if (err)
      return res.send({
        success: false,
        message: err,
      });

    if (results.length != 1)
      return res.send({
        success: false,
        message: '获取用户信息失败',
      });
    
      const userInfo = { ...results[0] };

      delete userInfo['password']

    res.send({
      success: true,
      message: '获取基本信息成功！',
      data: userInfo,
    });
  });
};

// * 定义路由和处理函数
// * 验证表单数据
// * 实现更新用户基本信息的功能

exports.updateUserInfo = (req, res) => {
  const sqlStr = `update cs_base set ? where id=?`;

  db.query(sqlStr, [req.body, req.body.id], (err, results) => {
    if (err)
      return res.send({
        success: false,
        message: err,
      });
    if (results.affectedRows !== 1)
      return res.send({
        success: false,
        message: '更新失败',
      });

    return res.send({
      success: true,
      message: '用户信息更新成功！',
    });
  });
};

// 定义路由和处理函数
// 验证表单数据
// 实现重置密码的功能

exports.updatePwd = (req, res) => {
  // * 根据这个 req.user.id 查
  const sqlStr = `select * from cs_base where id=?`;

  db.query(sqlStr, req.user.id, (err, results) => {
    // 判断语句是否错误
    if (err)
      return res.send({
        success: false,
        message: err,
      });

    // 根据返回数组长度看有没有这一项
    if (results.length !== 1)
      return res.send({
        success: false,
        message: '用户不存在',
      });

    // * 通过第三方模块进行密码对比 结果返回 布尔值
    const flag = bcrypt.compareSync(req.body.oldPwd, results[0].password);

    if (!flag)
      return res.send({
        success: false,
        message: '原密码错误',
      });

    // * 一系列的过滤到这 -> 新密码 -> 加密 -> 存 -> 判断是否成功

    const newPwd = bcrypt.hashSync(req.body.newPwd, 10);

    const sqlStr = 'update cs_base set password = ? where id = ?';

    db.query(sqlStr, [newPwd, req.user.id], (err, results) => {
      if (err)
        return res.send({
          success: false,
          message: err,
        });

      if (results.affectedRows !== 1)
        return res.send({
          success: false,
          message: '密码修改失败',
        });
      res.send({
        success: true,
        message: '密码更新成功',
      });
    });
  });
};

// 修改昵称
exports.updateNickname = (req, res) => {
  const sqlStr = 'update cs_base set nickname=? where id = ?';

  db.query(sqlStr, [req.body.nickname, req.user.id], (err, results) => {
    if (err)
      return res.send({
        success: false,
        message: err,
      });

    if (results.affectedRows !== 1)
      return res.send({
        success: false,
        message: '昵称更新失败',
      });

    return res.send({
      success: true,
      message: '昵称更新成功',
    });
  });
};

// 定义路由和处理函数
// 验证表单数据
// 实现更新用户头像的功能

// 

exports.updateAvatar = (req, res) => {
  const sqlStr = 'update cs_base set avatar=? where id = ?';

  db.query(sqlStr, [req.body.avatar, req.user.id], (err, results) => {
    if (err)
      return res.send({
        success: false,
        message: err,
      });

    if (results.affectedRows !== 1)
      return res.send({
        success: false,
        message: '头像更新失败',
      });

    return res.send({
      success: true,
      message: '用户头绪更新成功',
    });
  });
};
